home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / ip / nfs / nfswatch4.0 / sgi.map.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-01  |  12.6 KB  |  522 lines

  1. /*
  2.  * $Header: /home/harbor/davy/system/nfswatch/RCS/sgi.map.h,v 4.0 1993/03/01 19:59:00 davy Exp $
  3.  *
  4.  * sgi.map.h    - made up from various other header files 
  5.  *
  6.  * Tim Hudson
  7.  * Mincom Pty Ltd
  8.  * Mincom Centre
  9.  * Juliette Street
  10.  * Greenslopes 4120
  11.  * Brisbane Australia
  12.  * 
  13.  * tjh@mincom.oz.au
  14.  *
  15.  * $Log: sgi.map.h,v $
  16.  * Revision 4.0  1993/03/01  19:59:00  davy
  17.  * NFSWATCH Version 4.0.
  18.  *
  19.  * Revision 1.3  1993/01/13  21:25:45  davy
  20.  * Added ether_header, so we don't need to include the ultrix map.
  21.  *
  22.  * Revision 1.2  1993/01/13  20:18:17  davy
  23.  * Added RCS headers.
  24.  *
  25.  */
  26.  
  27. #ifndef    IPPROTO_ND
  28. /* Trying to compile this not on a Sun system */
  29. #define    IPPROTO_ND    77    /* From <netinet/in.h> on a Sun somewhere */
  30. #endif    /* IPPROTO_ND */
  31.  
  32. struct ether_addr {
  33.         u_char  ether_addr_octet[6];
  34. };
  35.  
  36. #ifndef ETHERTYPE_REVARP
  37. /* some systems don't define this */
  38. #define ETHERTYPE_REVARP    0x8035
  39. #define REVARP_REQUEST        3
  40. #define REVARP_REPLY        4
  41. #endif  /* ETHERTYPE_REVARP */
  42.  
  43. /* Map things in the ether_arp struct */
  44. #define arp_xsha arp_sha
  45. #define arp_xspa arp_spa
  46. #define arp_xtha arp_tha
  47. #define arp_xtpa arp_tpa
  48.  
  49. /* Map protocol types */
  50. #define ETHERPUP_IPTYPE ETHERTYPE_IP
  51. #define ETHERPUP_REVARPTYPE ETHERTYPE_REVARP
  52. #define ETHERPUP_ARPTYPE ETHERTYPE_ARP
  53.  
  54. /* newish RIP commands */
  55. #ifndef    RIPCMD_POLL
  56. #define    RIPCMD_POLL    5
  57. #endif    /* RIPCMD_POLL */
  58. #ifndef    RIPCMD_POLLENTRY
  59. #define    RIPCMD_POLLENTRY    6
  60. #endif    /* RIPCMD_POLLENTRY */
  61.  
  62. /* good old SGI bastards not putting all the definitions in the
  63.  * include files ... this defn pulled from <sys/vfs.h> SunOS4.1
  64.  */
  65.  
  66. typedef struct {
  67.     ushort val[2];
  68. } fsid_t;
  69.  
  70.  
  71. /* DIRECT include of SunOS 4.1 <nfs/nfs.h> as the IRIX <sys/fs/nfs.h>
  72.  * is in such a state as to be confusing/painful to use
  73.  */
  74.  
  75. /*    @(#)nfs.h 2.40 89/12/13 SMI     */
  76.  
  77. #ifndef _nfs_nfs_h
  78. #define    _nfs_nfs_h
  79.  
  80. /* Maximum size of data portion of a remote request */
  81. #define    NFS_MAXDATA    8192
  82. #define    NFS_MAXNAMLEN    255
  83. #define    NFS_MAXPATHLEN    1024
  84.  
  85. /*
  86.  * Rpc retransmission parameters
  87.  */
  88. #define    NFS_TIMEO    11    /* initial timeout in tenths of a sec. */
  89. #define    NFS_RETRIES    5    /* times to retry request */
  90.  
  91. /*
  92.  * maximum transfer size for different interfaces
  93.  */
  94. #define    ECTSIZE    2048
  95. #define    IETSIZE    8192
  96.  
  97. /*
  98.  * Error status
  99.  * Should include all possible net errors.
  100.  * For now we just cast errno into an enum nfsstat.
  101.  */
  102. enum nfsstat {
  103.     NFS_OK = 0,            /* no error */
  104.     NFSERR_PERM=EPERM,        /* Not owner */
  105.     NFSERR_NOENT=ENOENT,        /* No such file or directory */
  106.     NFSERR_IO=EIO,            /* I/O error */
  107.     NFSERR_NXIO=ENXIO,        /* No such device or address */
  108.     NFSERR_ACCES=EACCES,        /* Permission denied */
  109.     NFSERR_EXIST=EEXIST,        /* File exists */
  110.     NFSERR_NODEV=ENODEV,        /* No such device */
  111.     NFSERR_NOTDIR=ENOTDIR,        /* Not a directory */
  112.     NFSERR_ISDIR=EISDIR,        /* Is a directory */
  113.     NFSERR_FBIG=EFBIG,        /* File too large */
  114.     NFSERR_NOSPC=ENOSPC,        /* No space left on device */
  115.     NFSERR_ROFS=EROFS,        /* Read-only file system */
  116.     NFSERR_NAMETOOLONG=ENAMETOOLONG, /* File name too long */
  117.     NFSERR_NOTEMPTY=ENOTEMPTY,    /* Directory not empty */
  118.     NFSERR_DQUOT=EDQUOT,        /* Disc quota exceeded */
  119.     NFSERR_STALE=ESTALE,        /* Stale NFS file handle */
  120.     NFSERR_WFLUSH            /* write cache flushed */
  121. };
  122. #define    puterrno(error)        ((enum nfsstat)error)
  123. #define    geterrno(status)    ((int)status)
  124.  
  125. /*
  126.  * File types
  127.  */
  128. enum nfsftype {
  129.     NFNON,
  130.     NFREG,        /* regular file */
  131.     NFDIR,        /* directory */
  132.     NFBLK,        /* block special */
  133.     NFCHR,        /* character special */
  134.     NFLNK        /* symbolic link */
  135. };
  136.  
  137. /*
  138.  * Special kludge for fifos (named pipes)  [to adhere to NFS Protocol Spec]
  139.  *
  140.  * VFIFO is not in the protocol spec (VNON will be replaced by VFIFO)
  141.  * so the over-the-wire representation is VCHR with a '-1' device number.
  142.  *
  143.  * NOTE: This kludge becomes unnecessary with the Protocol Revision,
  144.  *     but it may be necessary to support it (backwards compatibility).
  145.  */
  146. #define    NFS_FIFO_TYPE    NFCHR
  147. #define    NFS_FIFO_MODE    S_IFCHR
  148. #define    NFS_FIFO_DEV    (~0)
  149.  
  150. /* identify fifo in nfs attributes */
  151. #define    NA_ISFIFO(NA)    (((NA)->na_type == NFS_FIFO_TYPE) && \
  152.                 ((NA)->na_rdev == NFS_FIFO_DEV))
  153.  
  154. /* set fifo in nfs attributes */
  155. #define    NA_SETFIFO(NA)    { \
  156.             (NA)->na_type = NFS_FIFO_TYPE; \
  157.             (NA)->na_rdev = NFS_FIFO_DEV; \
  158.             (NA)->na_mode = ((NA)->na_mode&~S_IFMT)|NFS_FIFO_MODE; \
  159.             }
  160.  
  161.  
  162. /*
  163.  * Size of an fhandle in bytes
  164.  */
  165. #define    NFS_FHSIZE    32
  166.  
  167. /*
  168.  * File access handle
  169.  * This structure is the Sun server representation of a file.
  170.  * It is handed out by a server for the client to use in further
  171.  * file transactions.
  172.  */
  173.  
  174. #ifdef NFSSERVER
  175. /*
  176.  * This struct is only used to find the size of the data field in the
  177.  * fhandle structure below.
  178.  */
  179. static
  180. struct fhsize {
  181.     fsid_t    f1;
  182.     u_short    f2;
  183.     char    f3[4];
  184.     u_short    f4;
  185.     char    f5[4];
  186. };
  187. #define    NFS_FHMAXDATA    ((NFS_FHSIZE - sizeof (struct fhsize) + 8) / 2)
  188.  
  189. struct svcfh {
  190.     fsid_t    fh_fsid;        /* filesystem id */
  191.     u_short    fh_len;            /* file number length */
  192.     char    fh_data[NFS_FHMAXDATA];    /* and data */
  193.     u_short    fh_xlen;        /* export file number length */
  194.     char    fh_xdata[NFS_FHMAXDATA]; /* and data */
  195. };
  196.  
  197. typedef struct svcfh fhandle_t;
  198. #else
  199. /*
  200.  * This is the client view of an fhandle
  201.  */
  202. typedef struct {
  203.     char    fh_data[NFS_FHSIZE];    /* opaque data */
  204. } fhandle_t;
  205. #endif
  206.  
  207.  
  208. /*
  209.  * Arguments to remote write and writecache
  210.  */
  211. struct nfswriteargs {
  212.     fhandle_t    wa_fhandle;    /* handle for file */
  213.     u_long        wa_begoff;    /* beginning byte offset in file */
  214.     u_long        wa_offset;    /* current byte offset in file */
  215.     u_long        wa_totcount;    /* total write cnt (to this offset) */
  216.     u_long        wa_count;    /* size of this write */
  217.     char        *wa_data;    /* data to write (up to NFS_MAXDATA) */
  218.     struct mbuf    *wa_mbuf;    /* mbuf containing data */
  219. };
  220.  
  221.  
  222. /*
  223.  * File attributes
  224.  */
  225. struct nfsfattr {
  226.     enum nfsftype    na_type;    /* file type */
  227.     u_long        na_mode;    /* protection mode bits */
  228.     u_long        na_nlink;    /* # hard links */
  229.     u_long        na_uid;        /* owner user id */
  230.     u_long        na_gid;        /* owner group id */
  231.     u_long        na_size;    /* file size in bytes */
  232.     u_long        na_blocksize;    /* prefered block size */
  233.     u_long        na_rdev;    /* special device # */
  234.     u_long        na_blocks;    /* Kb of disk used by file */
  235.     u_long        na_fsid;    /* device # */
  236.     u_long        na_nodeid;    /* inode # */
  237.     struct timeval    na_atime;    /* time of last access */
  238.     struct timeval    na_mtime;    /* time of last modification */
  239.     struct timeval    na_ctime;    /* time of last change */
  240. };
  241.  
  242. #define    n2v_type(x)    (NA_ISFIFO(x) ? VFIFO : (enum vtype)((x)->na_type))
  243. #define    n2v_rdev(x)    (NA_ISFIFO(x) ? 0 : (x)->na_rdev)
  244.  
  245. /*
  246.  * Arguments to remote read
  247.  */
  248. struct nfsreadargs {
  249.     fhandle_t    ra_fhandle;    /* handle for file */
  250.     u_long        ra_offset;    /* byte offset in file */
  251.     u_long        ra_count;    /* immediate read count */
  252.     u_long        ra_totcount;    /* total read cnt (from this offset) */
  253. };
  254.  
  255. /*
  256.  * Status OK portion of remote read reply
  257.  */
  258. struct nfsrrok {
  259.     struct nfsfattr    rrok_attr;    /* attributes, need for pagin */
  260.     u_long        rrok_count;    /* bytes of data */
  261.     char        *rrok_data;    /* data (up to NFS_MAXDATA bytes) */
  262.     char        *rrok_map;    /* pointer to mapped data */
  263.     struct vnode    *rrok_vp;    /* vnode assoc. with mapping */
  264. };
  265.  
  266. /*
  267.  * Reply from remote read
  268.  */
  269. struct nfsrdresult {
  270.     enum nfsstat    rr_status;        /* status of read */
  271.     union {
  272.         struct nfsrrok    rr_ok_u;    /* attributes, need for pagin */
  273.     } rr_u;
  274. };
  275. #define    rr_ok        rr_u.rr_ok_u
  276. #define    rr_attr        rr_u.rr_ok_u.rrok_attr
  277. #define    rr_count    rr_u.rr_ok_u.rrok_count
  278. #define    rr_data        rr_u.rr_ok_u.rrok_data
  279. #define    rr_map        rr_u.rr_ok_u.rrok_map
  280. #define    rr_vp        rr_u.rr_ok_u.rrok_vp
  281.  
  282.  
  283. /*
  284.  * File attributes which can be set
  285.  */
  286. struct nfssattr {
  287.     u_long        sa_mode;    /* protection mode bits */
  288.     u_long        sa_uid;        /* owner user id */
  289.     u_long        sa_gid;        /* owner group id */
  290.     u_long        sa_size;    /* file size in bytes */
  291.     struct timeval    sa_atime;    /* time of last access */
  292.     struct timeval    sa_mtime;    /* time of last modification */
  293. };
  294.  
  295.  
  296. /*
  297.  * Reply status with file attributes
  298.  */
  299. struct nfsattrstat {
  300.     enum nfsstat    ns_status;        /* reply status */
  301.     union {
  302.         struct nfsfattr ns_attr_u;    /* NFS_OK: file attributes */
  303.     } ns_u;
  304. };
  305. #define    ns_attr    ns_u.ns_attr_u
  306.  
  307.  
  308. /*
  309.  * NFS_OK part of read sym link reply union
  310.  */
  311. struct nfssrok {
  312.     u_long    srok_count;    /* size of string */
  313.     char    *srok_data;    /* string (up to NFS_MAXPATHLEN bytes) */
  314. };
  315.  
  316. /*
  317.  * Result of reading symbolic link
  318.  */
  319. struct nfsrdlnres {
  320.     enum nfsstat    rl_status;        /* status of symlink read */
  321.     union {
  322.         struct nfssrok    rl_srok_u;    /* name of linked to */
  323.     } rl_u;
  324. };
  325. #define    rl_srok        rl_u.rl_srok_u
  326. #define    rl_count    rl_u.rl_srok_u.srok_count
  327. #define    rl_data        rl_u.rl_srok_u.srok_data
  328.  
  329.  
  330. /*
  331.  * Arguments to readdir
  332.  */
  333. struct nfsrddirargs {
  334.     fhandle_t rda_fh;    /* directory handle */
  335.     u_long rda_offset;    /* offset in directory (opaque) */
  336.     u_long rda_count;    /* number of directory bytes to read */
  337. };
  338.  
  339. /*
  340.  * NFS_OK part of readdir result
  341.  */
  342. struct nfsrdok {
  343.     u_long    rdok_offset;        /* next offset (opaque) */
  344.     u_long    rdok_size;        /* size in bytes of entries */
  345.     bool_t    rdok_eof;        /* true if last entry is in result */
  346.     struct dirent *rdok_entries;    /* variable number of entries */
  347. };
  348.  
  349. /*
  350.  * Readdir result
  351.  */
  352. struct nfsrddirres {
  353.     u_long        rd_bufsize;    /* client request size (not xdr'ed) */
  354.     u_long        rd_origreqsize;    /* client request size */
  355.     enum nfsstat    rd_status;
  356.     union {
  357.         struct nfsrdok rd_rdok_u;
  358.     } rd_u;
  359. };
  360. #define    rd_rdok        rd_u.rd_rdok_u
  361. #define    rd_offset    rd_u.rd_rdok_u.rdok_offset
  362. #define    rd_size        rd_u.rd_rdok_u.rdok_size
  363. #define    rd_eof        rd_u.rd_rdok_u.rdok_eof
  364. #define    rd_entries    rd_u.rd_rdok_u.rdok_entries
  365.  
  366.  
  367. /*
  368.  * Arguments for directory operations
  369.  */
  370. struct nfsdiropargs {
  371.     fhandle_t    da_fhandle;    /* directory file handle */
  372.     char        *da_name;    /* name (up to NFS_MAXNAMLEN bytes) */
  373. };
  374.  
  375. /*
  376.  * NFS_OK part of directory operation result
  377.  */
  378. struct  nfsdrok {
  379.     fhandle_t    drok_fhandle;    /* result file handle */
  380.     struct nfsfattr    drok_attr;    /* result file attributes */
  381. };
  382.  
  383. /*
  384.  * Results from directory operation
  385.  */
  386. struct  nfsdiropres {
  387.     enum nfsstat    dr_status;    /* result status */
  388.     union {
  389.         struct  nfsdrok    dr_drok_u;    /* NFS_OK result */
  390.     } dr_u;
  391. };
  392. #define    dr_drok        dr_u.dr_drok_u
  393. #define    dr_fhandle    dr_u.dr_drok_u.drok_fhandle
  394. #define    dr_attr        dr_u.dr_drok_u.drok_attr
  395.  
  396. /*
  397.  * arguments to setattr
  398.  */
  399. struct nfssaargs {
  400.     fhandle_t    saa_fh;        /* fhandle of file to be set */
  401.     struct nfssattr    saa_sa;        /* new attributes */
  402. };
  403.  
  404. /*
  405.  * arguments to create and mkdir
  406.  */
  407. struct nfscreatargs {
  408.     struct nfsdiropargs    ca_da;    /* file name to create and parent dir */
  409.     struct nfssattr        ca_sa;    /* initial attributes */
  410. };
  411.  
  412. /*
  413.  * arguments to link
  414.  */
  415. struct nfslinkargs {
  416.     fhandle_t        la_from;    /* old file */
  417.     struct nfsdiropargs    la_to;        /* new file and parent dir */
  418. };
  419.  
  420. /*
  421.  * arguments to rename
  422.  */
  423. struct nfsrnmargs {
  424.     struct nfsdiropargs rna_from;    /* old file and parent dir */
  425.     struct nfsdiropargs rna_to;    /* new file and parent dir */
  426. };
  427.  
  428. /*
  429.  * arguments to symlink
  430.  */
  431. struct nfsslargs {
  432.     struct nfsdiropargs    sla_from;    /* old file and parent dir */
  433.     char            *sla_tnm;    /* new name */
  434.     struct nfssattr        sla_sa;        /* attributes */
  435. };
  436.  
  437. /*
  438.  * NFS_OK part of statfs operation
  439.  */
  440. struct nfsstatfsok {
  441.     u_long fsok_tsize;    /* preferred transfer size in bytes */
  442.     u_long fsok_bsize;    /* fundamental file system block size */
  443.     u_long fsok_blocks;    /* total blocks in file system */
  444.     u_long fsok_bfree;    /* free blocks in fs */
  445.     u_long fsok_bavail;    /* free blocks avail to non-superuser */
  446. };
  447.  
  448. /*
  449.  * Results of statfs operation
  450.  */
  451. struct nfsstatfs {
  452.     enum nfsstat    fs_status;    /* result status */
  453.     union {
  454.         struct    nfsstatfsok fs_fsok_u;    /* NFS_OK result */
  455.     } fs_u;
  456. };
  457. #define    fs_fsok        fs_u.fs_fsok_u
  458. #define    fs_tsize    fs_u.fs_fsok_u.fsok_tsize
  459. #define    fs_bsize    fs_u.fs_fsok_u.fsok_bsize
  460. #define    fs_blocks    fs_u.fs_fsok_u.fsok_blocks
  461. #define    fs_bfree    fs_u.fs_fsok_u.fsok_bfree
  462. #define    fs_bavail    fs_u.fs_fsok_u.fsok_bavail
  463.  
  464. /*
  465.  * XDR routines for handling structures defined above
  466.  */
  467. bool_t xdr_attrstat();
  468. bool_t xdr_creatargs();
  469. bool_t xdr_diropargs();
  470. bool_t xdr_diropres();
  471. bool_t xdr_drok();
  472. bool_t xdr_fattr();
  473. bool_t xdr_fhandle();
  474. bool_t xdr_linkargs();
  475. bool_t xdr_rddirargs();
  476. bool_t xdr_putrddirres();
  477. bool_t xdr_getrddirres();
  478. bool_t xdr_rdlnres();
  479. bool_t xdr_rdresult();
  480. bool_t xdr_readargs();
  481. bool_t xdr_rnmargs();
  482. bool_t xdr_rrok();
  483. bool_t xdr_saargs();
  484. bool_t xdr_sattr();
  485. bool_t xdr_slargs();
  486. bool_t xdr_srok();
  487. bool_t xdr_timeval();
  488. bool_t xdr_writeargs();
  489. bool_t xdr_statfs();
  490.  
  491. /*
  492.  * Remote file service routines
  493.  */
  494. #define    RFS_NULL    0
  495. #define    RFS_GETATTR    1
  496. #define    RFS_SETATTR    2
  497. #define    RFS_ROOT    3
  498. #define    RFS_LOOKUP    4
  499. #define    RFS_READLINK    5
  500. #define    RFS_READ    6
  501. #define    RFS_WRITECACHE    7
  502. #define    RFS_WRITE    8
  503. #define    RFS_CREATE    9
  504. #define    RFS_REMOVE    10
  505. #define    RFS_RENAME    11
  506. #define    RFS_LINK    12
  507. #define    RFS_SYMLINK    13
  508. #define    RFS_MKDIR    14
  509. #define    RFS_RMDIR    15
  510. #define    RFS_READDIR    16
  511. #define    RFS_STATFS    17
  512. #define    RFS_NPROC    18
  513.  
  514. /*
  515.  * remote file service numbers
  516.  */
  517. #define    NFS_PROGRAM    ((u_long)100003)
  518. #define    NFS_VERSION    ((u_long)2)
  519. #define    NFS_PORT    2049
  520.  
  521. #endif /*!_nfs_nfs_h*/
  522.